<?php

require_once "../Entidades/Evento.php";
require_once "Conexion.php";

class RepositorioEvento
{
	function InsertarEvento($evento)
	{
		$cnx = new Conexion();
		$conexion = $cnx->conexion();
		$id_evento = 0;
	
		$cus = $evento->GetIdAutor();
		$fev = $evento->GetFechaEvento();
		$hor = $evento->GetHoraEvento();
		$des = $evento->GetDescripcion();
		$url = $evento->GetUrl();
	
		$q = 'INSERT INTO evento (cod_usuario_creador, fecha_evento, hora_evento, descripcion, timestamp, url) VALUES (?,?,?,?,now(),?)';
	
		if ($stmt = $conexion->prepare($q))
		{
			if(!$stmt->bind_param('issss',$cus,$fev,$hor,$des,$url))
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error al procesar parametros: ' . $conexion->error);
			}
			if(!$stmt->execute())
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la consulta: ' . $conexion->error);
			}
	
			$id_evento= $conexion->insert_id;
			$stmt->close();
		}
		$conexion->close();
		return $id_evento;
	}
	
	
	function ObtenerListadoEventos($cantidad_eventos)
	{ 
		$cnx = new Conexion();
		$conexion = $cnx->conexion();

		if ($cantidad_eventos == 0) //Obtiene todos los eventos
		{
			$q = "SELECT evento.*,usuario.nombre_usuario as usr FROM evento, usuario WHERE evento.cod_usuario_creador = usuario.cod_usuario AND fecha_evento >= now() ORDER BY fecha_evento, hora_evento";
		}
		else // Obtiene los ultimos eventos, la cantidad es la indicada en $cantidad_eventos
		{
			$q = "SELECT evento.*,usuario.nombre_usuario as usr FROM evento, usuario WHERE evento.cod_usuario_creador = usuario.cod_usuario AND fecha_evento >= now() ORDER BY fecha_evento, hora_evento LIMIT $cantidad_eventos";
		}

		if ($stmt = $conexion->prepare($q))
		{

			if(!$stmt->execute())
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la ejecucion de la consulta: ' . $conexion->error);
			}

			$data = $stmt->get_result();

			if(!isset($data) || !$data)
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error al obtener los datos: ' . $conexion->error);
			}

			$listaeventos = array();
			while($evento = $data->fetch_array(MYSQLI_ASSOC))
			{
				if(isset($evento))
				{
					$ev = new Evento();
						
					$ev->SetId($evento['cod_evento']);
					$ev->SetIdAutor($evento['cod_usuario_creador']);
					$ev->SetFechaEvento($evento['fecha_evento']);
					$ev->SetHoraEvento($evento['hora_evento']);
					$ev->SetDescripcion($evento['descripcion']);
					$ev->SetUrl($evento['url']);
					$ev->SetContadorMeGusta($evento['counter_me_gusta']);
					$ev->SetContadorYoVoy($evento['contador_yo_voy']);
					$ev->SetNombreUsuarioAutor($evento['usr']);
						
					array_push($listaeventos,$ev);
				}
			}
			$stmt->close();
		}
		$conexion->close();
		return $listaeventos;
	}

	function ObtenerEvento($cod_evento)
	{
		if(!is_numeric($cod_evento) || $cod_evento <= 0)
		{
			throw new Exception('El codigo de evento no es valido');
		}

		$cnx = new Conexion();
		$conexion = $cnx->conexion();

		$q = 'SELECT evento.*, usuario.nombre_usuario as usr FROM evento, usuario WHERE evento.cod_evento = ? and evento.cod_usuario_creador = usuario.cod_usuario;';

		if ($stmt = $conexion->prepare($q))
		{
			if(!$stmt->bind_param('i', $cod_evento))
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la procesamiento de los parametros de la consulta: ' . $conexion->error);
			}

			if(!$stmt->execute())
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la ejecucion de la consulta: ' . $conexion->error);
			}

			$datos = $stmt->get_result();

			if(!isset($datos) || !$datos)
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la obtencion de los datos: ' . $conexion->error);
			}

			$evento = $datos->fetch_array(MYSQLI_ASSOC);

			if(isset($evento))
			{
				$ev = new Evento();

				$ev->SetId($evento['cod_evento']);
				$ev->SetIdAutor($evento['cod_usuario_creador']);
				$ev->SetFechaEvento($evento['fecha_evento']);
				$ev->SetHoraEvento($evento['hora_evento']);
				$ev->SetDescripcion($evento['descripcion']);
				$ev->SetUrl($evento['url']);
				$ev->SetContadorMeGusta($evento['counter_me_gusta']);
				$ev->SetContadorYoVoy($evento['contador_yo_voy']);
				$ev->SetNombreUsuarioAutor($evento['usr']);
					
				$stmt->close();
				$conexion->close();
				return $ev;
			}
			else
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('El evento no existe');
			}
		}
		$conexion->close();
	}

	function BuscarEvento($cadena_texto)
	{
		$cnx = new Conexion();
		$conexion = $cnx->conexion();

		if(!isset($cadena_texto) || empty($cadena_texto))
		{
			throw new Exception('indique una cadena de texto a buscar');
		}

		$q ='SELECT evento.*, usuario.nombre_usuario as usr FROM evento, usuario WHERE evento.cod_usuario_creador = usuario.cod_usuario AND descripcion LIKE ? AND fecha_evento > now() ORDER BY fecha_evento, hora_evento DESC';

		if ($stmt = $conexion->prepare($q))
		{
			$cadena_texto = '%' . $cadena_texto  .'%';
			if(!$stmt->bind_param('s',$cadena_texto))
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error al procesar parametros: ' . $conexion->error);
			}
				
			if(!$stmt->execute())
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la ejecucion de la consulta: ' . $conexion->error);
			}

			$data = $stmt->get_result();

			if(!isset($data) || !$data)
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error al obtener los datos: ' . $conexion->error);
			}

			$listaeventos = array();
			while($evento = $data->fetch_array(MYSQLI_ASSOC))
			{
				if(isset($evento))
				{
					$ev = new Evento();

					$ev->SetId($evento['cod_evento']);
					$ev->SetIdAutor($evento['cod_usuario_creador']);
					$ev->SetFechaEvento($evento['fecha_evento']);
					$ev->SetHoraEvento($evento['hora_evento']);
					$ev->SetDescripcion($evento['descripcion']);
					$ev->SetUrl($evento['url']);
					$ev->SetContadorMeGusta($evento['counter_me_gusta']);
					$ev->SetContadorYoVoy($evento['contador_yo_voy']);
					$ev->SetNombreUsuarioAutor($evento['usr']);

					array_push($listaeventos,$ev);
				}
			}
			$conexion->close();
			return $listaeventos;
		}
	}

	function MeGustaEvento($cod_evento)
	{
		try
		{
			$cnx = new Conexion();
			$conexion = $cnx->conexion();
				
			$q = 'UPDATE evento SET counter_me_gusta = counter_me_gusta + 1 WHERE cod_evento = ?;';
				
			if ($stmt = $conexion->prepare($q))
			{
				if(!$stmt->bind_param('i',$cod_evento))
				{
					$stmt->close();
					$conexion->close();
					throw new Exception('Error al procesar parametros: ' . $conexion->error);
				}
					
				if(!$stmt->execute())
				{
					$stmt->close();
					$conexion->close();
					throw new Exception('Error en la consulta: ' . $conexion->error);
				}
				$stmt->close();
			}
			$conexion->close();
			return 0;
		}
		catch (Exception $e)
		{
			return 1;
		}
	}

	function YoVoyEvento($cod_evento)
	{
		try
		{
			$cnx = new Conexion();
			$conexion = $cnx->conexion();
				
			$q = 'UPDATE evento SET contador_yo_voy = contador_yo_voy + 1 WHERE cod_evento = ?;';
				
			if ($stmt = $conexion->prepare($q))
			{
				if(!$stmt->bind_param('i',$cod_evento))
				{
					$stmt->close();
					$conexion->close();
					throw new Exception('Error al procesar parametros: ' . $conexion->error);
				}
					
				if(!$stmt->execute())
				{
					$stmt->close();
					$conexion->close();
					throw new Exception('Error en la consulta: ' . $conexion->error);
				}
				$stmt->close();
			}
			$conexion->close();
			return 0;
		}
		catch (Exception $e)
		{
			return 1;
		}
	}

	function ObtenerContadorYoVoy($cod_evento)
	{
		$contador_megusta = -1;

		if(!is_numeric($cod_evento) || $cod_evento <= 0)
		{
			throw new Exception('El codigo de evento no es valido');
		}

		$cnx = new Conexion();
		$conexion = $cnx->conexion();

		$q = 'SELECT counter_me_gusta FROM evento WHERE cod_evento = ?';

		if ($stmt = $conexion->prepare($q))
		{
			if(!$stmt->bind_param('i', $cod_evento))
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la procesamiento de los parametros de la consulta: ' . $conexion->error);
			}

			if(!$stmt->execute())
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la ejecucion de la consulta: ' . $conexion->error);
			}

			$dato = $stmt->get_result();

			if(!isset($dato))
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la obtencion de los datos: ' . $conexion->error);
			}

			$dato_evento =  $dato->fetch_array(MYSQLI_ASSOC);

			if (isset($dato_evento))
			{
				$contador_megusta = $dato_evento['counter_me_gusta'];
			}
			else
			{
				throw new Exception('El evento no existe');
			}
			$stmt->close();
			$conexion->close();
			return $contador_megusta;
		}
		$conexion->close();
	}

	function ObtenerContadorMeGusta($cod_evento)
	{
		$cont_yo_voy = -1;

		if(!is_numeric($cod_evento) || $cod_evento <= 0)
		{
			throw new Exception('El codigo de comentario no es valido');
		}

		$cnx = new Conexion();
		$conexion = $cnx->conexion();

		$q = 'SELECT contador_yo_voy FROM evento WHERE cod_evento = ?';

		if ($stmt = $conexion->prepare($q))
		{
			if(!$stmt->bind_param('i', $cod_evento))
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la procesamiento de los parametros de la consulta: ' . $conexion->error);
			}

			if(!$stmt->execute())
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la ejecucion de la consulta: ' . $conexion->error);
			}

			$dato = $stmt->get_result();

			if(!isset($dato))
			{
				$stmt->close();
				$conexion->close();
				throw new Exception('Error en la obtencion de los datos: ' . $conexion->error);
			}

			$dato_evento =  $dato->fetch_array(MYSQLI_ASSOC);

			if (isset($dato_evento))
			{
				$cont_yo_voy = $dato_comentario['contador_yo_voy'];
			}
			else
			{
				throw new Exception('El evento no existe');
			}
			$stmt->close();
			$conexion->close();
			return $cont_yo_voy;
		}
		$conexion->close();
	}

}
?>  
